package com.coolingme.Case;

import java.lang.reflect.Field;

/**
 * 通过反射，改变String的值
 * String 结构 private final char[] value
 *
 * @author wangyue
 * @date 2019/3/15 15:11
 */
public class ChangeStringValue {
    public static void main(String[] args) throws Exception {
        // 定义String类
        String string = new String("123");
        System.out.println(string);

        // 1.通过String对象获取clazz
        Class clazz = string.getClass();

        // 2.通过clazz获取属性对象
        Field field = clazz.getDeclaredField("value");

        // 3.强吻，设置私有属性可以被操作
        field.setAccessible(true);

        // 4.通过对象取值（内存地址）
//        private final char[] value = {'1','2','3'};
        char[] temp = (char[]) field.get(string);

        // 5.通过temp地址的引用，找到真是String对象中的数组，修改数组中的每一个元素
        temp[0] = 'A';
        temp[1] = 'B';
        temp[2] = 'C';

        System.out.println(string);



    }
}
